/**
 * 
 */
package edu.zut.hb.software.sample.base.service;
import java.io.Serializable;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import edu.zut.hb.software.sample.base.domain.BaseEntity;

/**
 * @author Mie
 *
 */
public interface GenericManager<T extends BaseEntity<PK>,PK extends Serializable> {	
	/**delete entity according given id 根据给定id删除实体
	 * @param id  entity id  
	 */
	public void delete(PK id);
	public void deleteAll();
	
	/**fetch all entities 获取所有实体
	 * @return list for all entities 返回所有实体的集合
	 */
	public Iterable<T> findAll();
	
	/** 
	 * @param  page pagable structure 页面分页结构
	 * @return pagable list 返回页面总数（集合），指定页面的页面格式{@link PageFormat} 和打印链接 {@link Printable} 
	 */
	public Page<T> findAll(Pageable page);//import dependency <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
	
	/** fetch specific entity according entity id 根据实体id查找指定的实体
	 * @param id
	 * @return entity
	 */
	public T findById(PK id);
	
	/** 保存实体集
	 * @param entities entity set to save
	 * @return Iteable entity set 返回实体集合
	 */
	public Iterable<T> save(Iterable<T> entities);
	
	/**
	 * @param entity
	 * @return save specific entity 保存指定的实体
	 */
	public T save(T entity);
	
	public long count();//计数
	

}
